package com.ygqh.baby.service;

import com.ygqh.baby.ao.*;
import com.ygqh.baby.exception.YgException;
import com.ygqh.baby.model.CommitKjOrderParam;
import com.ygqh.baby.model.UserBargainInfo;
import com.ygqh.baby.model.YgPtSkuInfo;
import com.ygqh.baby.model.YgShoppingCarModel;
import com.ygqh.baby.po.YgUserBargain;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;

public interface YgUserBargainService {

    List<YgUserBargain> find();

    int findCount();

    YgUserBargain findById(Long id);

    int deleteSoft(Long[] ids);

    int deleteSoft(Long id);

    int save(YgUserBargain ygUserBargain);

    int update(YgUserBargain ygUserBargain);

    int saveOrUpdate(YgUserBargain ygUserBargain);

    ResultSet<YgUserBargain> search(QueryInfo queryInfo, Long productId, Long bargainId, Long userId, String q, String platformNo);

    ResultSet<YgUserBargain> search(QueryInfo queryInfo, Long userBargainId, String userName, String productName,
                                    Date startDate, Date endDate, JobStatus jobStatus, String q);

    /**
     * 用户是否存在进行中同一花色砍价活动
     *
     * @param userId
     * @param productId
     * @param bargainId 入参
     * @return Boolean 返回类型
     * @throws
     * @Title: existUserBargain
     * @author （guohao）
     * @date 2017年8月18日 上午10:58:25
     * @version V1.0
     */
    Boolean existUserBargain(Long userId, Long productId, Long bargainId);

    YgUserBargain findUserBargain(Long userId, Long productId, Long bargainId);

    /**
     * 用户发起砍价活动
     *
     * @param productId
     * @param userId     入参
     * @param platformNo 入参
     * @param skuId      入参
     * @return Message 返回类型
     * @throws
     * @Title: addUserBargain
     * @author （guohao）
     * @date 2017年8月18日 上午10:56:42
     * @version V1.0
     */
    Message addUserBargain(Long productId, Long userId, Long userAddressId, String platformNo, Long skuId);

    /**
     * 用户申请砍价列表
     *
     * @param queryInfo
     * @param productId
     * @param bargainId 入参
     * @return List<YgUserBargain> 返回类型
     * @throws
     * @Title: findUserBargainList
     * @author （guohao）
     * @date 2017年8月18日 下午1:10:49
     * @version V1.0
     */
    List<YgUserBargain> findUserBargainList(QueryInfo queryInfo, Long productId, Long bargainId, Long userId, String platformNo);

    /**
     * 剁手页展示
     *
     * @param userBargainId 入参
     * @return UserBargainInfo 返回类型
     * @throws
     * @Title: findUserBargainInfo
     * @author （guohao）
     * @date 2017年8月18日 下午1:53:16
     * @version V1.0
     */
    UserBargainInfo findUserBargainInfo(Long userBargainId);

    /**
     * @param preCutPrice   本次之前已砍价金额
     * @param thisCutPrice  本次已砍价金额
     * @param lastCutCount  本次之前剩余次数 入参
     * @param userBargainId
     * @return int 返回类型
     * @throws
     * @Title: updateCutPrice
     * @author （guohao）
     * @date 2017年8月18日 下午4:54:40
     * @version V1.0
     */
    int updateCutPrice(BigDecimal preCutPrice, BigDecimal thisCutPrice, Long lastCutCount, Long userBargainId);

    Message cutPrice(Long userId, String openId, String headUrl, String nickName, Long userBargainId);

    /**
     * 获取结算页商品信息
     */
    List<YgShoppingCarModel> findGoodsInfoKJ(List<YgPtSkuInfo> skuList, Long userId, Long userBargainId)
            throws YgException;

    Message commitOrderKJ(List<YgPtSkuInfo> skuList, PayType payType, Long userBargainId, Long userAddressId,
                          BigDecimal totalPrice, String sourceCode, BigDecimal accountPrice, Long userId) throws YgException;

    Message commitOrderKJ(CommitKjOrderParam commitKjOrderParam);

    /**
     * 发送砍价客服消息
     *
     * @param cutName       砍价人昵称
     * @param cutPrice
     * @param to            接收人openId 入参
     * @param userBargainId
     * @return Message 返回类型
     * @throws
     * @Title: sendCutMsg
     * @author （guohao）
     * @date 2017年8月23日 下午2:26:16
     * @version V1.0
     */
    Message sendCutMsg(String cutName, BigDecimal cutPrice, String to, Long userBargainId);

    Message sendCutMsg(String cutName, BigDecimal cutPrice, String to, Long userBargainId, String platformNo);

    /**
     * 是否完成砍价（砍到目标价）
     *
     * @param userBargainId 入参
     * @return Boolean 返回类型
     * @throws
     * @Title: isBargaincompletion
     * @author （guohao）
     * @date 2017年8月23日 下午2:34:26
     * @version V1.0
     */
    Boolean isBargainCompletion(Long userBargainId);

    List<YgUserBargain> findUserBargainLastOneHour(Date startTime, Date endTime);

    void sendBargainInvitation(Long userBargainId);

    int updateBargainExpiredStatus(Long userBargainId);

    int findCompletedCount(Long bargainId, Long productId, Long userId);

    Map<String, Object> findItemInfo(List<YgPtSkuInfo> skuList, Long id, Long userBargainId);

    int closeRunningUserBargain(Long bargainId, Long productId, String handler, Date updateTime);

    int updateUserBargainStatusComplete(Long userBargainId, BargainGenerationMode generationMode);
}
